package com.mb.system.dao;

import com.mb.system.domain.AreaDO;
import org.apache.ibatis.annotations.Param;
import org.mapstruct.Mapper;

import java.util.List;
import java.util.Map;

@Mapper
public interface IAreaDao {

    /**
     * @Description: 根据id获取一个
     * @Param:
     * @return:
     * @Author: TimothyZz
     * @Date: 2018/4/9 16:08
     */
    AreaDO getOne(Long areaId);

    /**
     * @Description: 获取省份
     * @Param:
     * @return:
     * @Author: TimothyZz
     * @Date: 2018/3/27
     */
    List<AreaDO> getProvince();

    /**
     * @Description: 获取已开通业务的省
     * @Param:
     * @return:
     * @Author: TimothyZz
     * @Date: 2018/4/8 11:08
     */
    List<AreaDO> getOpenedProvince();

    /**
     * @Description: 根据省份id获取城市或者根据城市id获取区域
     * @Param:
     * @return:
     * @Author: TimothyZz
     * @Date: 2018/3/27
     */
    List<AreaDO> getArea(Long areaId);

    /**
     * @Description: 获取已开通业务的区域
     * @Param:
     * @return:
     * @Author: TimothyZz
     * @Date: 2018/4/8 11:10
     */
    List<AreaDO> getOpenedArea(Long areaId);

    /**
     * @Description: 根据area对象获取上级area, 根据传入的对象的upperAreaId查询
     * @Param:
     * @return:
     * @Author: TimothyZz
     * @Date: 2018/3/27
     */
    AreaDO getUpperArea(AreaDO areaDO);

    /**
     * @Description: 修改area
     * @Param:
     * @return:
     * @Author: TimothyZz
     * @Date: 2018/3/27
     */
    Integer update(AreaDO areaDO);

    /***
     * 未开放地区查询
     * @param areaId
     * @return
     */
    List<AreaDO> getUnOpenedArea(Long areaId);


    //得到持有 的省
    List<AreaDO> getProvinces();

    List<AreaDO> getAllProvinces();

    //得到某个省下所有的市
    List<AreaDO> getCities(Long areaId);

    List<AreaDO> getAllCities(Long areaId);


    //得到某个市下面的所有区
    List<AreaDO> getVillages(Long areaId);

    List<AreaDO> getAllVillages(Long areaId);


    //得到持有 的省
    List<Map> getOneArea(Integer level);

    //销售方取省、市、区接口(返回省、市、区JSON 数组)
    List<Map> getAreaForSale(Integer level);

    //根据区编号得到其省市区名称
    Map getProvinceCityVillageByAreaId(Long areaId);

    //根据areaId获取
    AreaDO get(Long areaId);

    //根据areaId查询开通地区
    Map<String, Object> getOpenAreaByAreaId(Long areaId);

    List<AreaDO> getAllArea();

    //查看市级下面所有的区未开通的数量getUnOpenCount
    int getUnOpenCount(Long areaId);

    /**
     * 根据level获取所有的开通区域
     * @param isOpen
     * @param level
     * @return
     */
    List<AreaDO> listOpenAreasByLevel(@Param("isOpen") Integer isOpen, @Param("level") Integer level);
}
